/*
 * JInternalFrameBibliotecaComponentes.java
 *
 * Copyright 2011 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Created on 12/09/2010, 10:17:56 AM
 */

package com.ufps.cuatro.vistas.biblioteca;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;

import org.jdesktop.application.Action;
import org.jdesktop.application.Task;

import com.ufps.cuatro.CuatroApp;
import com.ufps.cuatro.modelo.analizador.UtilAnalizador;
import com.ufps.cuatro.modelo.biblioteca.BibliotecaTrabajo;
import com.ufps.cuatro.modelo.representacion.componente.Componente;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorContenedor;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorExtra;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteGeneradoSimple;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGenerador;
import com.ufps.cuatro.modelo.representacion.EventoOyente;
import com.ufps.cuatro.modelo.representacion.Oyente;
import com.ufps.cuatro.modelo.representacion.UtilRepresentacion;
import com.ufps.cuatro.util.Bandera;
import com.ufps.cuatro.util.IconoFileChooser;
import com.ufps.cuatro.util.ImplementarAyudaStandar;
import com.ufps.cuatro.util.InformacionNodo;
import com.ufps.cuatro.util.ItemViewContenedor;
import com.ufps.cuatro.util.TipoItemViewContenedor;
import com.ufps.cuatro.util.Utileria;
import com.ufps.cuatro.util.generadores.GeneradorArbol;
import com.ufps.cuatro.util.render.MyListRendererJLabel;
import com.ufps.cuatro.util.render.MyTreeCellRender;
import com.ufps.cuatro.controlador.render.UtilRender;
import com.ufps.cuatro.vistas.representacion.JDialogPropiedadesComponente;

/**
 *<i><b>JInternalFrameBibliotecaComponentes:</b></i> @DefinicionClase
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 12/09/2010
 * @see javax.swing.JInternalFrame
 * @see  Observer
 * @see ImplementarAyudaStandar
 */
public class JInternalFrameBibliotecaComponentes extends javax.swing.JInternalFrame implements Observer{
    private static final long serialVersionUID = -6058530532179772220L;
   
    private TipoItemViewContenedor eItemCombo;
    private ItemViewContenedor objItem;
    private Object objSeleccionado;        

    /** Creates new form JInternalFrameBibliotecaComponentes */
    public JInternalFrameBibliotecaComponentes() {
        initComponents();
        this.setFrameIcon(Utileria.leerIconoApp(Utileria.MODO_16x16));       
        ArrayList<ItemViewContenedor> objItems = new ArrayList<ItemViewContenedor>();
        objItems.add(new ItemViewContenedor(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("BIBLIOTECA DE LOCAL"), TipoItemViewContenedor.eBibliotecaLocal));
        objItems.add(new ItemViewContenedor(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("BIBLIOTECA DE GLOBAL"), TipoItemViewContenedor.eBibliotecaGlobal));        
        objItems.add(new ItemViewContenedor(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("BIBLIOTECA DE INTERCAMBIO"), TipoItemViewContenedor.eBibliotecaSwap));
        JComboBox objCombo = new JComboBox(objItems.toArray());
        this.jComboBoxOrigen.setModel(objCombo.getModel());
        MyListRendererJLabel objRender = new MyListRendererJLabel(0);
        this.jComboBoxOrigen.setRenderer(objRender);
        this.jComboBoxOrigen.setSelectedIndex(0);        
    }
    
    private boolean crearArbol(){
        DefaultMutableTreeNode objRaiz = null;
        if(eItemCombo == TipoItemViewContenedor.eBibliotecaLocal){
            if(UtilRepresentacion.objBibliotecaTrabajoLocal.isEmpty()){
               objRaiz = new DefaultMutableTreeNode(new InformacionNodo(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("SIN COMPONENTES"), null));
            }
            else{
                objRaiz = 
                    GeneradorArbol.crearEstructuraBibliotecaAll(objItem.getStrLabel(), UtilRepresentacion.objBibliotecaTrabajoLocal, false);
            }
        }
        else if(eItemCombo == TipoItemViewContenedor.eBibliotecaGlobal){
            if(UtilRepresentacion.objBibliotecaTrabajoGlobal.isEmpty()){
               objRaiz = new DefaultMutableTreeNode(new InformacionNodo(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("SIN COMPONENTES"), null));
            }
            else{
                objRaiz = 
                    GeneradorArbol.crearEstructuraBibliotecaAll(objItem.getStrLabel(), UtilRepresentacion.objBibliotecaTrabajoGlobal, false);
            }
        }
        else if(eItemCombo == TipoItemViewContenedor.eBibliotecaSwap){
            if(UtilRepresentacion.objBibliotecaTrabajoSwap.isEmpty()){
               objRaiz = new DefaultMutableTreeNode(new InformacionNodo(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("SIN COMPONENTES"), null));
            }
            else{
                objRaiz = 
                    GeneradorArbol.crearEstructuraBibliotecaAll(objItem.getStrLabel(), UtilRepresentacion.objBibliotecaTrabajoSwap, false);
            }
        }
        else{
            objRaiz = new DefaultMutableTreeNode(new InformacionNodo(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("SIN COMPONENTES"), null));
        }         
        JTree objArbol = new JTree(objRaiz);
        this.jTreeComponentes.setModel(objArbol.getModel());
        MyTreeCellRender objRender = new MyTreeCellRender(Utileria.ARBOL_COMPONENTES);
        this.jTreeComponentes.setCellRenderer(objRender);        
        this.jTreeComponentes.setSelectionRow(0);        
        return true;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPopupMenu1 = new javax.swing.JPopupMenu();
        jLabel2 = new javax.swing.JLabel();
        jToolBar1 = new javax.swing.JToolBar();
        jButtonImport = new javax.swing.JButton();
        jButtonExport = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JToolBar.Separator();
        jButtonView = new javax.swing.JButton();
        jSeparator4 = new javax.swing.JToolBar.Separator();
        jButtonDel = new javax.swing.JButton();
        jSeparator3 = new javax.swing.JToolBar.Separator();
        jButtonCancel = new javax.swing.JButton();
        jSeparator2 = new javax.swing.JToolBar.Separator();
        jButton1 = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();
        jComboBoxOrigen = new javax.swing.JComboBox();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTreeComponentes = new javax.swing.JTree();

        jPopupMenu1.setName("jPopupMenuOperaciones"); // NOI18N

        setClosable(true);
        setIconifiable(true);
        setResizable(true);
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance().getContext().getResourceMap(JInternalFrameBibliotecaComponentes.class);
        setTitle(resourceMap.getString("Form.title")); // NOI18N
        setFrameIcon(resourceMap.getIcon("Form.frameIcon")); // NOI18N
        setName("Form"); // NOI18N

        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N

        jToolBar1.setFloatable(false);
        jToolBar1.setRollover(true);
        jToolBar1.setName("jToolBar1"); // NOI18N

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance().getContext().getActionMap(JInternalFrameBibliotecaComponentes.class, this);
        jButtonImport.setAction(actionMap.get("importBiblioteca")); // NOI18N
        jButtonImport.setText(resourceMap.getString("jButtonImport.text")); // NOI18N
        jButtonImport.setFocusable(false);
        jButtonImport.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButtonImport.setName("jButtonImport"); // NOI18N
        jButtonImport.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(jButtonImport);

        jButtonExport.setAction(actionMap.get("exportBiblioteca")); // NOI18N
        jButtonExport.setText(resourceMap.getString("jButtonExport.text")); // NOI18N
        jButtonExport.setFocusable(false);
        jButtonExport.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButtonExport.setName("jButtonExport"); // NOI18N
        jButtonExport.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(jButtonExport);

        jSeparator1.setName("jSeparator1"); // NOI18N
        jToolBar1.add(jSeparator1);

        jButtonView.setAction(actionMap.get("vistaPrevia")); // NOI18N
        jButtonView.setText(resourceMap.getString("jButtonView.text")); // NOI18N
        jButtonView.setFocusable(false);
        jButtonView.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButtonView.setName("jButtonView"); // NOI18N
        jButtonView.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(jButtonView);

        jSeparator4.setName("jSeparator4"); // NOI18N
        jToolBar1.add(jSeparator4);

        jButtonDel.setAction(actionMap.get("delComponente")); // NOI18N
        jButtonDel.setText(resourceMap.getString("jButtonDel.text")); // NOI18N
        jButtonDel.setFocusable(false);
        jButtonDel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButtonDel.setName("jButtonDel"); // NOI18N
        jButtonDel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(jButtonDel);

        jSeparator3.setName("jSeparator3"); // NOI18N
        jToolBar1.add(jSeparator3);

        jButtonCancel.setAction(actionMap.get("cancelar")); // NOI18N
        jButtonCancel.setText(resourceMap.getString("jButtonCancel.text")); // NOI18N
        jButtonCancel.setFocusable(false);
        jButtonCancel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButtonCancel.setName("jButtonCancel"); // NOI18N
        jButtonCancel.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(jButtonCancel);

        jSeparator2.setName("jSeparator2"); // NOI18N
        jToolBar1.add(jSeparator2);

        jButton1.setAction(actionMap.get("helpFormulario")); // NOI18N
        jButton1.setFocusable(false);
        jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jButton1.setName("jButton1"); // NOI18N
        jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(jButton1);

        jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N
        jLabel3.setName("jLabel3"); // NOI18N

        jComboBoxOrigen.setName("jComboBoxOrigen"); // NOI18N
        jComboBoxOrigen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBoxOrigenActionPerformed(evt);
            }
        });

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        jTreeComponentes.setName("jTreeComponentes"); // NOI18N
        jTreeComponentes.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                jTreeComponentesValueChanged(evt);
            }
        });
        jScrollPane1.setViewportView(jTreeComponentes);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 356, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jComboBoxOrigen, 0, 250, Short.MAX_VALUE)
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 336, Short.MAX_VALUE)
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 336, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel3)
                    .addComponent(jComboBoxOrigen, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 337, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jComboBoxOrigenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBoxOrigenActionPerformed
        objItem = (ItemViewContenedor) this.jComboBoxOrigen.getSelectedItem();
        eItemCombo = objItem.geteTipoItem();
        seleccionarBiblioteca();
    }//GEN-LAST:event_jComboBoxOrigenActionPerformed

    private void jTreeComponentesValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_jTreeComponentesValueChanged
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) (evt.getPath().getLastPathComponent());
        Object nodeInfo = node.getUserObject();
        InformacionNodo objNodoSeleccionado = (InformacionNodo) nodeInfo;
        try {
            this.objSeleccionado = objNodoSeleccionado.getObjElemento();
            if (node.isRoot()) {
                //El nodo seleccionado es la raiz del arbol
            } else if (node.isLeaf()) {
                //El nodo seleccionado es una hoja
            } else {
                //El nodo seleccionado es una rama
            }
            this.createPopupMenu();
        } catch (java.lang.ClassCastException ex) {
            Logger.getLogger(JInternalFrameBibliotecaComponentes.class.getName()).log(Level.SEVERE, null, ex);
        }
}//GEN-LAST:event_jTreeComponentesValueChanged

    /**
     * @DefinicionMetodo
     */
    @Action
    public void delComponente() {
        if(this.objSeleccionado == null){
           Utileria.mostrarMensaje(this, java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("NO HA SELECCIONADO UN COMPONENTE"), "", JOptionPane.WARNING_MESSAGE);
           return;
        }        
        else if(objSeleccionado instanceof ComponenteGeneradoSimple){
            ComponenteGeneradoSimple objComponenteGenerado = (ComponenteGeneradoSimple) objSeleccionado;
            if(!objComponenteGenerado.isIndependiente()){
                Utileria.mostrarMensaje(this, "El Componente Generado no es Independiente.", "", JOptionPane.WARNING_MESSAGE);                
                return;
            }
            else{
                if(Utileria.confirmarOrden(this, "¿Desea Eliminar el Componente Generado Seleccionado?", "")){
                    if(eItemCombo == TipoItemViewContenedor.eBibliotecaLocal){
                        UtilRepresentacion.objBibliotecaTrabajoLocal.del(objComponenteGenerado);
                        Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                    }
                    else if(eItemCombo == TipoItemViewContenedor.eBibliotecaGlobal){
                        if(UtilRepresentacion.objBibliotecaTrabajoGlobal.del(objComponenteGenerado)){
                            if(Utileria.guardarBiblioteca(UtilAnalizador.eliminarExtension(UtilRepresentacion.strPathBibliotecaGlobal),
                                    UtilRepresentacion.objBibliotecaTrabajoGlobal)){                    
                                Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                            }
                            else{
                                Utileria.mostrarMensaje(this, "Error al Actualizar la Biblioteca.", "", JOptionPane.ERROR_MESSAGE);                
                            }
                        }
                    }
                    else if(eItemCombo == TipoItemViewContenedor.eBibliotecaSwap){
                        UtilRepresentacion.objBibliotecaTrabajoSwap.del(objComponenteGenerado);
                        Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                    }                                            
                    this.crearArbol();
                }                
            }
        }
        else if(objSeleccionado instanceof ComponenteDistribuidorExtra){
            ComponenteDistribuidorExtra objComponenteExtra = (ComponenteDistribuidorExtra) objSeleccionado;            
            if(Utileria.confirmarOrden(this, "¿Desea Eliminar el Componente Extra Seleccionado?", "")){
                if(eItemCombo == TipoItemViewContenedor.eBibliotecaLocal){
                    UtilRepresentacion.objBibliotecaTrabajoLocal.del(objComponenteExtra);
                    Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                }
                else if(eItemCombo == TipoItemViewContenedor.eBibliotecaGlobal){
                    if(UtilRepresentacion.objBibliotecaTrabajoGlobal.del(objComponenteExtra)){
                        if(Utileria.guardarBiblioteca(UtilAnalizador.eliminarExtension(UtilRepresentacion.strPathBibliotecaGlobal),
                                UtilRepresentacion.objBibliotecaTrabajoGlobal)){                    
                            Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                        }
                        else{
                            Utileria.mostrarMensaje(this, "Error al Actualizar la Biblioteca.", "", JOptionPane.ERROR_MESSAGE);                
                        }
                    }
                }
                else if(eItemCombo == TipoItemViewContenedor.eBibliotecaSwap){
                    UtilRepresentacion.objBibliotecaTrabajoSwap.del(objComponenteExtra);
                    Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                }                                            
                this.crearArbol();
            }                            
        }
        else if(objSeleccionado instanceof ComponenteDistribuidorGenerador){
            ComponenteDistribuidorGenerador objComponenteGenerador = (ComponenteDistribuidorGenerador) objSeleccionado;            
            if(Utileria.confirmarOrden(this, "¿Desea Eliminar el Componente Generador Seleccionado?", "")){
                if(eItemCombo == TipoItemViewContenedor.eBibliotecaLocal){
                    UtilRepresentacion.objBibliotecaTrabajoLocal.del(objComponenteGenerador);
                    Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                }
                else if(eItemCombo == TipoItemViewContenedor.eBibliotecaGlobal){
                    if(UtilRepresentacion.objBibliotecaTrabajoGlobal.del(objComponenteGenerador)){
                        if(Utileria.guardarBiblioteca(UtilAnalizador.eliminarExtension(UtilRepresentacion.strPathBibliotecaGlobal),
                                UtilRepresentacion.objBibliotecaTrabajoGlobal)){                    
                            Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                        }
                        else{
                            Utileria.mostrarMensaje(this, "Error al Actualizar la Biblioteca.", "", JOptionPane.ERROR_MESSAGE);                
                        }
                    }
                }
                else if(eItemCombo == TipoItemViewContenedor.eBibliotecaSwap){
                    UtilRepresentacion.objBibliotecaTrabajoSwap.del(objComponenteGenerador);
                    Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                }                                            
                this.crearArbol();
            }                            
        }
        else if(objSeleccionado instanceof ComponenteDistribuidorContenedor){
            ComponenteDistribuidorContenedor objComponenteContenedor = (ComponenteDistribuidorContenedor) objSeleccionado;            
            if(Utileria.confirmarOrden(this, "¿Desea Eliminar el Componente Contenedor Seleccionado?", "")){
                if(eItemCombo == TipoItemViewContenedor.eBibliotecaLocal){
                    UtilRepresentacion.objBibliotecaTrabajoLocal.del(objComponenteContenedor);
                    Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                }
                else if(eItemCombo == TipoItemViewContenedor.eBibliotecaGlobal){
                    if(UtilRepresentacion.objBibliotecaTrabajoGlobal.del(objComponenteContenedor)){
                        if(Utileria.guardarBiblioteca(UtilAnalizador.eliminarExtension(UtilRepresentacion.strPathBibliotecaGlobal),
                                UtilRepresentacion.objBibliotecaTrabajoGlobal)){                    
                            Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                        }
                        else{
                            Utileria.mostrarMensaje(this, "Error al Actualizar la Biblioteca.", "", JOptionPane.ERROR_MESSAGE);                
                        }
                    }
                }
                else if(eItemCombo == TipoItemViewContenedor.eBibliotecaSwap){
                    UtilRepresentacion.objBibliotecaTrabajoSwap.del(objComponenteContenedor);
                    Utileria.mostrarMensaje(this, "El Componente ha sido Eliminado Correctamente.", "", JOptionPane.WARNING_MESSAGE);                
                }                                            
                this.crearArbol();
            }                            
        }
    }
    
    /**
     * @DefinicionMetodo
     * @return @DefinicionReturn
     */
    @Action
    public Task vistaPrevia() {
        if(this.objSeleccionado == null){
            Utileria.mostrarMensaje(CuatroApp.getApplication().getMainFrame(), java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("NO HA SELECCIONADO UN COMPONENTE."), "", JOptionPane.WARNING_MESSAGE);
            return null;
        }
        return new VistaPreviaTask(org.jdesktop.application.Application.getInstance(com.ufps.cuatro.CuatroApp.class));
    }       

    private class VistaPreviaTask extends org.jdesktop.application.Task<Object, Void> {
        VistaPreviaTask(org.jdesktop.application.Application app) {            
            super(app);
        }
        @Override protected Object doInBackground() {            
            try {
                setProgress(20, 0, 100);
                setMessage(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("GENERANDO INTERFAZ DE CONTROLES."));
                Thread.sleep(500);
                JDialog objVistaPrevia = null;
                if(objSeleccionado instanceof ComponenteDistribuidorExtra){
                    ComponenteDistribuidorExtra objComponenteGenerador =
                            (ComponenteDistribuidorExtra) objSeleccionado;
                    //objVistaPrevia = GeneradorGUI.crearDialogConPlantilla(objComponenteGenerador);
                }
                setProgress(50, 0, 100);
                setMessage(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("GENERANDO CONTENEDOR DE INTERFAZ."));
                Thread.sleep(500);
                setProgress(90, 0, 100);
                setMessage(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("AGREGANDO CONTENEDOR A LA INTERFAZ."));
                Thread.sleep(500);
                return objVistaPrevia;// return your result
            } catch (InterruptedException ex) {
                Logger.getLogger(JInternalFrameBibliotecaComponentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            return null;
        }
        @Override protected void succeeded(Object result) {            
            if(result == null){
                try {
                    setProgress(0, 0, 100);
                    setMessage(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("LA VISTA PREVIA NO HA SIDO GENERADA."));
                    Thread.sleep(500);
                    return;
                } catch (InterruptedException ex) {
                    Logger.getLogger(JInternalFrameBibliotecaComponentes.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            else{
                try {
                    setProgress(0, 0, 100);
                    setMessage(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("INTERFAZ GENERADA CORRECTAMENTE."));
                    Thread.sleep(500);
                    JDialog objVista = (JDialog) result;
                    objVista.setVisible(true);                    
                } catch (InterruptedException ex) {
                    Logger.getLogger(JInternalFrameBibliotecaComponentes.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }

    /**
     * Cancela el proceso de administracion de bibliotecas y sale de la ventana
     */
    @Action
    public void cancelar() {
        if(Utileria.confirmarOrden(this, java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("¿DESEA CANCELAR EL PROCESO?"), ""))
            dispose();
    }

    /**
     * @DefinicionMetodo
     */
    @Action
    public void importBiblioteca() {
        BibliotecaTrabajo objBiblioteca = null;
        if(this.eItemCombo == TipoItemViewContenedor.eBibliotecaLocal){
            objBiblioteca = UtilRepresentacion.objBibliotecaTrabajoLocal;
        }
        else if(this.eItemCombo == TipoItemViewContenedor.eBibliotecaGlobal){
            objBiblioteca = UtilRepresentacion.objBibliotecaTrabajoGlobal;
        }        
        else if(this.eItemCombo == TipoItemViewContenedor.eBibliotecaSwap){
            objBiblioteca = UtilRepresentacion.objBibliotecaTrabajoSwap;            
        }
        if(objBiblioteca != null){
            if(!objBiblioteca.isEmpty()){
                if(!Utileria.confirmarOrden(
                        this,
                        java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("EXISTE UNA BIBLIOTECA PREVIAMENTE CREADA, SI REEMPLAZA PERDERÁ SU CONTENIDO. \\N¿DESEA CONTINUAR?."),
                        ""));
                return;
            }
            javax.swing.JFileChooser fc = new JFileChooser();
            javax.swing.filechooser.FileNameExtensionFilter filter =
                new javax.swing.filechooser.FileNameExtensionFilter(
                    Utileria.leerRecursoTexto("Utileria.file.lib.descripcion"),
                    Utileria.leerRecursoTexto("Utileria.file.lib.ext"));

            fc.setFileFilter(filter);         
            
            ImageIcon icono = Utileria.leerRecursoImagen(Utileria.ICONO_ITEM_COMBO_LIBG, Utileria.SIZE_ICON_16);
            JLabel labelIcono = new JLabel(icono);
            
            IconoFileChooser objIcono = new IconoFileChooser(
                    labelIcono.getIcon(),
                    Utileria.leerRecursoTexto("Utileria.file.lib.descripcion"),
                    Utileria.leerRecursoTexto("Utileria.file.lib.ext")
                    );            
            
            fc.setFileView(objIcono);

            File fileDir = null;

            if (Utileria.strTempDir.compareTo("") == 0) {
                fc.changeToParentDirectory();
            } else {
                fileDir = new File(Utileria.strTempDir);
                fc.setCurrentDirectory(fileDir);
            }

            int option = fc.showDialog(fc, java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("IMPORTAR BIBLIOTECA"));

            if (JFileChooser.APPROVE_OPTION == option) {
                Utileria.strTempDir = fc.getSelectedFile().getParent();                
                UtilRepresentacion.strPathExportBiblioteca = fc.getSelectedFile().getAbsolutePath();

                BibliotecaTrabajo objBibliotecaIm = 
                        Utileria.cargarBiblioteca(UtilAnalizador.eliminarExtension(UtilRepresentacion.strPathExportBiblioteca));
                    
                if(objBibliotecaIm != null){
                    
                    if(this.eItemCombo == TipoItemViewContenedor.eBibliotecaLocal){
                        UtilRepresentacion.objBibliotecaTrabajoLocal = objBibliotecaIm;
                    }
                    else if(this.eItemCombo == TipoItemViewContenedor.eBibliotecaGlobal){
                        UtilRepresentacion.objBibliotecaTrabajoGlobal = objBibliotecaIm;
                    }        
                    else if(this.eItemCombo == TipoItemViewContenedor.eBibliotecaSwap){
                        UtilRepresentacion.objBibliotecaTrabajoSwap = objBibliotecaIm;            
                    }                    
                    Utileria.mostrarMensaje(this, java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("BIBLIOTECA IMPORTADA CORRECTMENTE."), java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("EXPORTAR"), JOptionPane.INFORMATION_MESSAGE);                    
                    seleccionarBiblioteca();
                }
                else{
                    Utileria.mostrarMensaje(this, java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("ERROR AL IMPORTAR BIBLIOTECA."), java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("EXPORTAR"), JOptionPane.ERROR_MESSAGE);                    
                }
            }
        }
    }

    /**
     * @DefinicionMetodo
     */
    @Action
    public void exportBiblioteca() {
        BibliotecaTrabajo objBiblioteca = null;
        if(this.eItemCombo == TipoItemViewContenedor.eBibliotecaLocal){
            objBiblioteca = UtilRepresentacion.objBibliotecaTrabajoLocal;
        }
        else if(this.eItemCombo == TipoItemViewContenedor.eBibliotecaGlobal){
            objBiblioteca = UtilRepresentacion.objBibliotecaTrabajoGlobal;
        }        
        else if(this.eItemCombo == TipoItemViewContenedor.eBibliotecaSwap){
            objBiblioteca = UtilRepresentacion.objBibliotecaTrabajoSwap;            
        }
        if(objBiblioteca != null){
            if(objBiblioteca.isEmpty()){
                Utileria.mostrarMensaje(
                        this,
                        java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("NO PUEDE EXPORTAR UNA BIBLIOTECA VACÍA."),
                        "",
                        JOptionPane.WARNING_MESSAGE);
                return;
            }
            javax.swing.JFileChooser fc = new JFileChooser();
            javax.swing.filechooser.FileNameExtensionFilter filter =
                new javax.swing.filechooser.FileNameExtensionFilter(
                    Utileria.leerRecursoTexto("Utileria.file.lib.descripcion"),
                    Utileria.leerRecursoTexto("Utileria.file.lib.ext"));

            fc.setFileFilter(filter);         
            
            ImageIcon icono = Utileria.leerRecursoImagen(Utileria.ICONO_ITEM_COMBO_LIBG, Utileria.SIZE_ICON_16);
            JLabel labelIcono = new JLabel(icono);
            
            IconoFileChooser objIcono = new IconoFileChooser(
                    labelIcono.getIcon(),
                    Utileria.leerRecursoTexto("Utileria.file.lib.descripcion"),
                    Utileria.leerRecursoTexto("Utileria.file.lib.ext")
                    );            
            
            fc.setFileView(objIcono);

            File fileDir = null;

            if (Utileria.strTempDir.compareTo("") == 0) {
                fc.changeToParentDirectory();
            } else {
                fileDir = new File(Utileria.strTempDir);
                fc.setCurrentDirectory(fileDir);
            }

            int option = fc.showDialog(fc, java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("EXPORTAR BIBLIOTECA"));

            if (JFileChooser.APPROVE_OPTION == option) {
                Utileria.strTempDir = fc.getSelectedFile().getParent();
                if(fc.getSelectedFile().exists()){
                    if(!Utileria.confirmarOrden(this, java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("¿DESEA REEMPLAZAR EL ARCHIVO?"), ""))
                        return;
                }
                UtilRepresentacion.strPathExportBiblioteca = fc.getSelectedFile().getAbsolutePath();
                if(Utileria.guardarBiblioteca(UtilAnalizador.eliminarExtension(UtilRepresentacion.strPathExportBiblioteca),
                        objBiblioteca)){                    
                    Utileria.mostrarMensaje(this, java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("BIBLIOTECA EXPORTADA CORRECTMENTE."), java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("EXPORTAR"), JOptionPane.INFORMATION_MESSAGE);                    
                }
            }
        }
    }   

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButtonCancel;
    private javax.swing.JButton jButtonDel;
    private javax.swing.JButton jButtonExport;
    private javax.swing.JButton jButtonImport;
    private javax.swing.JButton jButtonView;
    private javax.swing.JComboBox jComboBoxOrigen;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPopupMenu jPopupMenu1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JToolBar.Separator jSeparator1;
    private javax.swing.JToolBar.Separator jSeparator2;
    private javax.swing.JToolBar.Separator jSeparator3;
    private javax.swing.JToolBar.Separator jSeparator4;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JTree jTreeComponentes;
    // End of variables declaration//GEN-END:variables

    @SuppressWarnings("unchecked")
    public void update(Observable o, Object arg) {
        if(o instanceof Bandera){            
            
        }        
    }

    /**
     * @DefinicionMetodo
     */
    @Action
    public void helpFormulario() {
        UtilRender.openDialogHelp(JInternalFrameBibliotecaComponentes.class, getTitle());
    }
    
    
    class PopupListener extends MouseAdapter {
        JPopupMenu popup;
        Object obj;

        PopupListener(JPopupMenu popupMenu, Object obj) {
            popup = popupMenu;
            this.obj = obj;
        }

        @Override
        public void mousePressed(MouseEvent e) {
            maybeShowPopup(e);
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            maybeShowPopup(e);
        }

        private void maybeShowPopup(MouseEvent e) {
            if (e.isPopupTrigger()) {
                int x = e.getX();
                int y = e.getY();
                TreePath path = JInternalFrameBibliotecaComponentes.this.jTreeComponentes.getPathForLocation(x, y);
                if (path != null){
                    JInternalFrameBibliotecaComponentes.this.jTreeComponentes.setSelectionPath(path);
                    DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
                    Object nodeInfo = node.getUserObject();
                    InformacionNodo objNodo = (InformacionNodo) nodeInfo;
                    Object objElemento = objNodo.getObjElemento();                    
                    if(objSeleccionado != null && objElemento != null){
                        if(objSeleccionado.equals(objElemento)){
                            if(objElemento instanceof ComponenteDistribuidorExtra){
                                System.out.println(path);
                                popup.show(e.getComponent(), x, y);
                            }        
                            else if(objElemento instanceof ComponenteGeneradoSimple){
                                System.out.println(path);
                                popup.show(e.getComponent(), x, y);
                            }
                        }
                    }
                }                
            }
        }

        public Object getObj() {
            return obj;
        }

        public JPopupMenu getPopup() {
            return popup;
        }        
        
    }
    
    private void verPropiedades(java.awt.event.ActionEvent evt){
        JFrame mainFrame = null;
        JDialogPropiedadesComponente objDialogPropiedadesComponente = null;
        if(this.objSeleccionado instanceof ComponenteDistribuidorExtra){
            mainFrame = CuatroApp.getApplication().getMainFrame();
            objDialogPropiedadesComponente = new JDialogPropiedadesComponente(
                    this, (Componente) this.objSeleccionado);
            objDialogPropiedadesComponente.setLocationRelativeTo(mainFrame);        
            CuatroApp.getApplication().show(objDialogPropiedadesComponente);                
        }        
        else if(this.objSeleccionado instanceof ComponenteGeneradoSimple){
            mainFrame = CuatroApp.getApplication().getMainFrame();
            objDialogPropiedadesComponente = new JDialogPropiedadesComponente(
                    this, (Componente) this.objSeleccionado);
            objDialogPropiedadesComponente.setLocationRelativeTo(mainFrame);        
            CuatroApp.getApplication().show(objDialogPropiedadesComponente);                
        }
        else{
            Utileria.mostrarMensaje(this, 
                    java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/asistente/resources/JInternalFrameComponentesContenedores").getString("EL OBJETO SELECCIONADO NO PRESENTA OPCIONES DISPONIBLES."), 
                    "", 
                    JOptionPane.WARNING_MESSAGE);
        }        
    }
    
    /**
     * @DefinicionMetodo
     * @return @DefinicionReturn
     */
    private JPopupMenu createPopupMenuComponenteGenerador(){
        //Create the popup menu.
        JPopupMenu popup = new JPopupMenu();
        popup.add(createPopupItemMenuPropiedades());
        popup.add(createPopupMenuEventos());        
        popup.add(createSeparador());
        popup.add(createPopupItemMenuAdministrar());
        //popup.add(createPopupItemMenuEliminar());
        return popup;
    } 
    
    /**
     * @DefinicionMetodo
     * @return @DefinicionReturn
     */
    private JPopupMenu createPopupMenuComponenteExtra(){
        //Create the popup menu.
        JPopupMenu popup = new JPopupMenu();
        popup.add(createPopupItemMenuPropiedades());
        popup.add(createPopupMenuEventos());
        popup.add(createSeparador());
        popup.add(createPopupItemMenuAdministrar());
        //popup.add(createPopupItemMenuEliminar());
        return popup;
    }
    
    /**
     * @DefinicionMetodo
     * @return @DefinicionReturn
     */
    private JPopupMenu createPopupMenuComponenteGenerado(){
        //Create the popup menu.
        JPopupMenu popup = new JPopupMenu();
        popup.add(createPopupItemMenuPropiedades());
        popup.add(createPopupMenuEventos());        
        return popup;
    }
    
    /**
     * @DefinicionMetodo
     * @return @DefinicionReturn
     */
    private JMenuItem createPopupItemMenuPropiedades(){
        JMenuItem menuItem;        
        menuItem = new JMenuItem(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/asistente/resources/JInternalFrameComponentesContenedores").getString("PROPIEDADES"));
        menuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                verPropiedades(evt);
            }
        });
        return menuItem;
    }
    
    /**
     * @DefinicionMetodo
     * @return @DefinicionReturn
     */
    private JMenuItem createPopupItemMenuAdministrar(){
        JMenuItem menuItem;        
        menuItem = new JMenuItem(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/asistente/resources/JInternalFrameComponentesContenedores").getString("ADMINISTRAR CONTENIDO"));
        menuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {     
                administrarComponentesGenerados();
            }            
        });
        return menuItem;
    }
    
    private void administrarComponentesGenerados() {
//        JDialogListaComponentes objDialog = new JDialogListaComponentes(this);
//        JFrame mainFrame = CuatroApp.getApplication().getMainFrame();
//        objDialog.setLocationRelativeTo(mainFrame);
//        objDialog.pack();
//        CuatroApp.getApplication().show(objDialog);
    }    
    
    /**
     * @DefinicionMetodo
     * @return @DefinicionReturn
     */
    private JMenu createPopupMenuEventos(){
        JMenu menuOyentes = new JMenu(java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/asistente/resources/JInternalFrameComponentesContenedores").getString("EVENTOS"));
         
        if(this.objSeleccionado instanceof ComponenteDistribuidorExtra){
            ComponenteDistribuidorExtra objComponente = (ComponenteDistribuidorExtra) this.objSeleccionado;
            for(Oyente objOyente : objComponente.getObjOyentes()){                
                ImageIcon icono = Utileria.leerRecursoImagen(Utileria.ICONO_OYENTE, Utileria.SIZE_ICON_16);
                JLabel labelIcono = new JLabel(icono);
                JMenu menuEventos = new JMenu(objOyente.getStrNombre());
                menuEventos.setToolTipText(objOyente.getStrToolTips());                
                menuEventos.setIcon(labelIcono.getIcon());
                ArrayList<EventoOyente> objEventos = objOyente.getObjEventos();
                for(EventoOyente objEvento : objEventos){
                    icono = Utileria.leerRecursoImagen(Utileria.ICONO_EVENTO, Utileria.SIZE_ICON_16);
                    labelIcono = new JLabel(icono);                
                    JCheckBoxMenuItem menuItemEvento = 
                            new JCheckBoxMenuItem(
                                objEvento.getStrAlias().isEmpty() ? objEvento.getStrNombre() : objEvento.getStrAlias(), 
                                labelIcono.getIcon(),
                                objEvento.isIncluido());
                    menuItemEvento.setToolTipText(objEvento.getStrTooltips());
                    menuItemEvento.setActionCommand(objEvento.getStrNombre());
                    menuItemEvento.addActionListener(new java.awt.event.ActionListener() {
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
                            procesarClickCheckBoxMenuItem(evt);
                        }
                    });
                    menuEventos.add(menuItemEvento);
                }
                menuOyentes.add(menuEventos);                
            }            
        }        
        else if(this.objSeleccionado instanceof ComponenteGeneradoSimple){
            ComponenteGeneradoSimple objComponente = (ComponenteGeneradoSimple) this.objSeleccionado;
            for(Oyente objOyente : objComponente.getObjOyentes()){                
                ImageIcon icono = Utileria.leerRecursoImagen(Utileria.ICONO_OYENTE, Utileria.SIZE_ICON_16);
                JLabel labelIcono = new JLabel(icono);
                JMenu menuEventos = new JMenu(objOyente.getStrNombre());
                menuEventos.setToolTipText(objOyente.getStrToolTips());                
                menuEventos.setIcon(labelIcono.getIcon());
                ArrayList<EventoOyente> objEventos = objOyente.getObjEventos();
                for(EventoOyente objEvento : objEventos){
                    icono = Utileria.leerRecursoImagen(Utileria.ICONO_EVENTO, Utileria.SIZE_ICON_16);
                    labelIcono = new JLabel(icono);                
                    JCheckBoxMenuItem menuItemEvento = 
                            new JCheckBoxMenuItem(
                                objEvento.getStrAlias().isEmpty() ? objEvento.getStrNombre() : objEvento.getStrAlias(), 
                                labelIcono.getIcon(),
                                objEvento.isIncluido());
                    menuItemEvento.setToolTipText(objEvento.getStrTooltips());
                    menuItemEvento.setActionCommand(objEvento.getStrNombre());
                    menuItemEvento.addActionListener(new java.awt.event.ActionListener() {
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
                            procesarClickCheckBoxMenuItem(evt);
                        }
                    });
                    menuEventos.add(menuItemEvento);
                }
                menuOyentes.add(menuEventos);                
            }            
        }
        return menuOyentes;     
    }
    
    /**
     * @DefinicionMetodo
     * @return @DefinicionReturn
     */
    private JSeparator createSeparador(){
        return new JSeparator();
    }    
    
    /**
     * @DefinicionMetodo
     */
    private void createPopupMenu() {        
        if(this.objSeleccionado instanceof ComponenteDistribuidorExtra){
            //Create the popup menu.
            JPopupMenu popup = this.createPopupMenuComponenteExtra();
            popup.setLightWeightPopupEnabled(true);        
            //Add listener to the text area so the popup menu can come up.
            PopupListener popupListener = new PopupListener(popup, this.objSeleccionado);        
            this.jTreeComponentes.addMouseListener(popupListener);            
        }        
        else if(this.objSeleccionado instanceof ComponenteGeneradoSimple){
            //Create the popup menu.
            JPopupMenu popup = this.createPopupMenuComponenteGenerado();
            popup.setLightWeightPopupEnabled(true);        
            //Add listener to the text area so the popup menu can come up.
            PopupListener popupListener = new PopupListener(popup, this.objSeleccionado);        
            this.jTreeComponentes.addMouseListener(popupListener);            
        }
    }
    
    private void procesarClickCheckBoxMenuItem(java.awt.event.ActionEvent evt){
        String strComando = evt.getActionCommand();
        if(this.objSeleccionado instanceof ComponenteDistribuidorExtra){
            ComponenteDistribuidorExtra objComponente = (ComponenteDistribuidorExtra) this.objSeleccionado;
            ArrayList<Oyente<Componente>> objOyentes = objComponente.getObjOyentes();            
            for(Oyente objOyente : objOyentes){
                int idOyente, idEvento; 
                ArrayList<EventoOyente> objEventos = objOyente.getObjEventos();
                idOyente = objOyentes.indexOf(objOyente);
                for(EventoOyente objEvento : objEventos){
                    if(objEvento.getStrNombre().equals(strComando)){
                        idEvento = objEventos.indexOf(objEvento);
                        JCheckBoxMenuItem menuItemEvento = (JCheckBoxMenuItem) evt.getSource();
                        objEvento.setIncluido(menuItemEvento.isSelected());
                        objEventos.set(idEvento, objEvento);
                        objOyentes.set(idOyente, objOyente);
                        objComponente.setObjOyentes(objOyentes);
                    }                    
                }                
            }
        } 
        else if(this.objSeleccionado instanceof ComponenteGeneradoSimple){
            ComponenteGeneradoSimple objComponente = (ComponenteGeneradoSimple) this.objSeleccionado;
            ArrayList<Oyente<Componente>> objOyentes = objComponente.getObjOyentes();            
            for(Oyente objOyente : objOyentes){
                int idOyente, idEvento; 
                ArrayList<EventoOyente> objEventos = objOyente.getObjEventos();
                idOyente = objOyentes.indexOf(objOyente);
                for(EventoOyente objEvento : objEventos){
                    if(objEvento.getStrNombre().equals(strComando)){
                        idEvento = objEventos.indexOf(objEvento);
                        JCheckBoxMenuItem menuItemEvento = (JCheckBoxMenuItem) evt.getSource();
                        objEvento.setIncluido(menuItemEvento.isSelected());
                        objEventos.set(idEvento, objEvento);
                        objOyentes.set(idOyente, objOyente);
                        objComponente.setObjOyentes(objOyentes);
                    }                    
                }                
            }
        }
    }

    /**
     * @DefinicionMetodo
     * @return @DefinicionReturn
     */
    public Object getObjSeleccionado() {
        return objSeleccionado;
    }

    /**
     * @DefinicionMetodo
     */
    @Action
    public void seleccionarBiblioteca() {
        if(this.jComboBoxOrigen.getSelectedIndex() == -1){
            Utileria.mostrarMensaje(this, 
                    java.util.ResourceBundle.getBundle("com/ufps/cuatro/vistas/biblioteca/resources/JInternalFrameBibliotecaComponentes").getString("DEBE SELECCIONAR UNA BIBLIOTECA."), 
                    "", 
                    JOptionPane.WARNING_MESSAGE);
            return;
        }
        if(eItemCombo == TipoItemViewContenedor.eBibliotecaLocal){
            this.jButtonImport.setEnabled(false);
            this.jButtonExport.setEnabled(!UtilRepresentacion.objBibliotecaTrabajoLocal.isEmpty());
        }
        else if(eItemCombo == TipoItemViewContenedor.eBibliotecaGlobal){
            this.jButtonImport.setEnabled(false);
            this.jButtonExport.setEnabled(!UtilRepresentacion.objBibliotecaTrabajoGlobal.isEmpty());
        }
        else if(eItemCombo == TipoItemViewContenedor.eBibliotecaSwap){
            this.jButtonImport.setEnabled(true);
            this.jButtonExport.setEnabled(!UtilRepresentacion.objBibliotecaTrabajoSwap.isEmpty());
        }
        this.crearArbol();
    }
}
